// call原理
Function.prototype._call = function (context, ...args) {
  let _context = context || window;
  _context.fn = this;
  let result = _context.fn(...args);
  delete _context.fn;
  return result;
}

// apply原理
Function.prototype._apply = function (context, argsArr) {
  let _context = context || window;
  _context.fn = this;
  let result = _context.fn(...argsArr);
  delete _context.fn;
  return result;
}

// bind原理
Function.prototype._bind = function (context, ...args) {
  let _context = context || window;
  _context.fn = this;

  return function (...args2) {
    let result = _context.fn(...args, ...args2);
    delete _context.fn;
    return result;
  }
}